#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;


//template<template< class T1> class TT, class T>

template<template< class T1> class TT, class IT>
bool eq(const TT<string>& tt1, const TT<string>& tt2) {
	if (tt1.size() != tt2.size()) return false;
	IT i1,i2;// type need to be templated
	for (i1=tt1.begin(),i2=tt2.begin(); i1!=tt1.end(); i1++,i2++)
		if (*i1 != *i2) return false;	
	return true;
}

/*
template<template< class T1> class TT>
//template<template< class T> class TT>
bool operator<(const TT<string>& tt1, const TT<string>& tt2) {
	if (tt2.size() < tt1.size()) return false;
	TT<string>::const_iterator i1,i2;
	for (i1=tt1.begin(),i2=tt2.begin(); i!=tt1.end(); i1++,i2++)
		if (!(*i1 < *i2)) then return false;	
	return true;
}
*/
template <class T> void show(const T& t){
	t.show();
}

int main(){
	vector<string> vs1, vs2;
	vs2.push_back("I");
	vs2.push_back("love");
	vs1.push_back("I");
	vs1.push_back("love");
	cout << (eq<vector, vector<string>::const_iterator>(vs1, vs2)) << endl;

	return 0;
}
